/**
 * 歌手分类ID枚举
 */
export enum ArtistGenreId {
    ALL = 0, // 全部
    POP = 1, // 流行
    RAP = 2, // 说唱
    CHINESE = 3, // 国风
    ROCK = 4, // 摇滚
    ELECTRONIC = 5, // 电子
    FOLK = 6, // 民谣
    RNB = 7, // R&B
    ETHNIC = 8, // 民族乐
    LIGHT = 9, // 轻音乐
    JAZZ = 10, // 爵士
    CLASSICAL = 11, // 古典
    COUNTRY = 12, // 乡村
    BLUES = 13, // 蓝调
}

/**
 * 歌手分类ID到名称的映射
 */
export const GENRE_NAME_MAP: Record<ArtistGenreId, string> = {
    [ArtistGenreId.ALL]: "全部",
    [ArtistGenreId.POP]: "流行",
    [ArtistGenreId.RAP]: "说唱",
    [ArtistGenreId.CHINESE]: "国风",
    [ArtistGenreId.ROCK]: "摇滚",
    [ArtistGenreId.ELECTRONIC]: "电子",
    [ArtistGenreId.FOLK]: "民谣",
    [ArtistGenreId.RNB]: "R&B",
    [ArtistGenreId.ETHNIC]: "民族乐",
    [ArtistGenreId.LIGHT]: "轻音乐",
    [ArtistGenreId.JAZZ]: "爵士",
    [ArtistGenreId.CLASSICAL]: "古典",
    [ArtistGenreId.COUNTRY]: "乡村",
    [ArtistGenreId.BLUES]: "蓝调",
}

/**
 * 歌手分类名称到ID的映射
 */
export const GENRE_ID_MAP: Record<string, ArtistGenreId> = Object.entries(GENRE_NAME_MAP).reduce(
    (acc, [id, name]) => {
        acc[name] = Number(id) as ArtistGenreId
        return acc
    },
    {} as Record<string, ArtistGenreId>,
)

/**
 * 获取歌手分类名称
 */
export function getGenreName(id: ArtistGenreId): string {
    return GENRE_NAME_MAP[id] || GENRE_NAME_MAP[ArtistGenreId.ALL]
}

/**
 * 获取歌手分类ID
 */
export function getGenreId(name: string): ArtistGenreId {
    return GENRE_ID_MAP[name] !== undefined ? GENRE_ID_MAP[name] : ArtistGenreId.ALL
}

/**
 * 所有歌手分类ID数组
 */
export const ALL_GENRE_IDS = Object.values(ArtistGenreId).filter(
    (value) => typeof value === "number",
) as ArtistGenreId[]

